/****
 * 令f(m,n)表示m个苹果放到n个盘子里有多少种放法，下面分类讨论:

 m<n时，至少有n-m个盘子空着(这些空盘子并不影响最后的结果，因为每种方法都带有着些空盘子)。只考虑m个苹果放m个盘子   f(m,n)=f(m,m)
 m>n时,按是否有空盘子 分2种情况：
           a.假设至少一个盘子空着，相当于f(m,n)=f(m,n-1)
           b.所有的盘子都有苹果，假设每个盘子可以先放一个，问题就变成：m-n个苹果放到n个盘子，即f(m,n)=f(m-n,n)

           总的放法为二者之和， f(m,n)=f(m,n-1)+f(m-n,n)

     3. 临界条件

          n=1时，所有苹果都放在同一个盘子里   f(m,n)=1
          m=0时，没有苹果                    f(m,n)=1
 * 
 * 
 */

function fun(m, n) {
    if (m <= 1 || n == 1) {
        return 1;
    } else if (n == 0) {
        return 0
    } else if (n > m) {
        // return fun(m, n - 1)
        return fun(m, m)
    }
    return fun(m - n, n) + fun(m, n - 1)
}

let a = fun(3, 40)
console.log(a);